#include "SqStack.h"

void InitStack(SqStack *S){					//初始化操作，建立一个空栈S 

	for(int i=0;i<MAXSIZE;++i){
		S->data[i] = ' ';
	}
	S->top = -1;							//栈顶指向最后一位，-1表明栈为空
}
void DestroyStack(SqStack *S){ 				//若栈存在，则销毁它  
	if(S==NULL)
		return;
	free(S);
}

void ClearStack(SqStack *S){ 				//将栈清空
	if(S==NULL)
		return;

	for(int i=0;i<MAXSIZE;++i){
		S->data[i] = 0;
	}
	S->top = -1;							//栈顶指向最后一位，-1表明栈为空
}
bool StackEmpty(SqStack S){					//若栈为空，返回true，否则返回false

	if(S.top==-1)
		return true;
	return false;
}

void GetTop(SqStack *S,SQElemType *e){		//若栈存在且非空，用e返回S的栈顶元素

	if(S->top==-1){
		free(e);
		e = NULL;
		return;
	}
	*e = S->data[S->top];
}
void Push(SqStack *S,SQElemType *e){		//若栈S存在，插入新元素e到栈S中并称为栈顶元素  
	if(S==NULL||S->top ==MAXSIZE-1)
		return; 
	S->top++;
	S->data[S->top] = *e; 
}

void Pop(SqStack *S,SQElemType *e){			//删除栈S中栈顶元素，并用e返回其值 
	if(S==NULL||S->top==-1)
		return;
	*e = S->data[S->top];
	S->data[S->top] = 0;
	S->top--; 
}
int StackLength(SqStack S){				//返回栈S的元素个数
	return S.top+1;
} 
